{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f02249e2",
   "metadata": {},
   "outputs": [],
   "source": [
    "# importing libaries\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.io"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "7c6ddce9",
   "metadata": {},
   "outputs": [],
   "source": [
    "class LEMCell(nn.Module):\n",
    "    def __init__(self, ninp, nhid, dt):\n",
    "        super(LEMCell, self).__init__()\n",
    "        self.ninp = ninp\n",
    "        self.nhid = nhid\n",
    "        self.dt = dt\n",
    "        self.inp2hid = nn.Linear(ninp, 4 * nhid)\n",
    "        self.hid2hid = nn.Linear(nhid, 3 * nhid)\n",
    "        self.transform_z = nn.Linear(nhid, nhid)\n",
    "        self.reset_parameters()\n",
    "\n",
    "    def reset_parameters(self):\n",
    "        std = 1.0 / np.sqrt(self.nhid)\n",
    "        for w in self.parameters():\n",
    "            w.data.uniform_(-std, std)\n",
    "\n",
    "    def forward(self, x, y, z):\n",
    "        transformed_inp = self.inp2hid(x)\n",
    "        transformed_hid = self.hid2hid(y)\n",
    "        i_dt1, i_dt2, i_z, i_y = transformed_inp.chunk(4, 1)\n",
    "        h_dt1, h_dt2, h_y = transformed_hid.chunk(3, 1)\n",
    "\n",
    "        ms_dt_bar = self.dt * torch.sigmoid(i_dt1 + h_dt1)\n",
    "        ms_dt = self.dt * torch.sigmoid(i_dt2 + h_dt2)\n",
    "\n",
    "        z = (1. - ms_dt) * z + ms_dt * torch.tanh(i_y + h_y)\n",
    "        y = (1. - ms_dt_bar) * y + ms_dt_bar * torch.tanh(self.transform_z(z) + i_z)\n",
    "\n",
    "        return y, z\n",
    "\n",
    "# Define the LEM model\n",
    "class LEM(nn.Module):\n",
    "    def __init__(self, ninp, nhid, nout, dt=1.):\n",
    "        super(LEM, self).__init__()\n",
    "        self.nhid = nhid\n",
    "        self.cell = LEMCell(ninp, nhid, dt)\n",
    "        self.classifier = nn.Linear(nhid, nout)\n",
    "        self.init_weights()\n",
    "\n",
    "    def init_weights(self):\n",
    "        for name, param in self.named_parameters():\n",
    "            if 'classifier' in name and 'weight' in name:\n",
    "                nn.init.kaiming_normal_(param.data)\n",
    "\n",
    "    def forward(self, input):\n",
    "        y = input.data.new(input.size(1), self.nhid).zero_()\n",
    "        z = input.data.new(input.size(1), self.nhid).zero_()\n",
    "        for x in input:\n",
    "            y, z = self.cell(x, y, z)\n",
    "        out = self.classifier(y)\n",
    "        return out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "36d6fa55",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Toy problem data\n",
    "input_size = 256  # number of columns in a dataset\n",
    "hidden_size = 32  # number of neurons\n",
    "output_size = 256  \n",
    "sequence_length = 160  # number of sequences/ number of rows\n",
    "batch_size = 1\n",
    "num_epochs = 20000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f6a2ae56",
   "metadata": {},
   "outputs": [],
   "source": [
    "# importing data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "2103e0ff",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Thu Jul 20 15:02:48 2023',\n",
       " '__version__': '1.0',\n",
       " '__globals__': [],\n",
       " 'h': array([[0.03949907, 0.03945555, 0.03968762, ..., 0.04081577, 0.04034067,\n",
       "         0.03995187],\n",
       "        [0.03949522, 0.03972834, 0.04007071, ..., 0.0406224 , 0.0405568 ,\n",
       "         0.04021852],\n",
       "        [0.03980837, 0.03966293, 0.04008707, ..., 0.04077249, 0.04050591,\n",
       "         0.04019281],\n",
       "        ...,\n",
       "        [0.04915863, 0.04935256, 0.04961976, ..., 0.04917885, 0.04899574,\n",
       "         0.04881741],\n",
       "        [0.04904458, 0.04916197, 0.04943338, ..., 0.04902097, 0.04897786,\n",
       "         0.04875013],\n",
       "        [0.04913692, 0.04932824, 0.04941899, ..., 0.04888785, 0.0488357 ,\n",
       "         0.04855312]])}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load the .mat file\n",
    "v_data = scipy.io.loadmat('v.mat')\n",
    "h_data = scipy.io.loadmat('h.mat')\n",
    "x_data = scipy.io.loadmat('x.mat')\n",
    "h_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "172f53d3",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = x_data['X']\n",
    "u = h_data['h']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "2cd6fd81",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(201, 256)\n",
      "(201, 256)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[0.03949907, 0.03945555, 0.03968762, ..., 0.04081577, 0.04034067,\n",
       "        0.03995187],\n",
       "       [0.03949522, 0.03972834, 0.04007071, ..., 0.0406224 , 0.0405568 ,\n",
       "        0.04021852],\n",
       "       [0.03980837, 0.03966293, 0.04008707, ..., 0.04077249, 0.04050591,\n",
       "        0.04019281],\n",
       "       ...,\n",
       "       [0.04915863, 0.04935256, 0.04961976, ..., 0.04917885, 0.04899574,\n",
       "        0.04881741],\n",
       "       [0.04904458, 0.04916197, 0.04943338, ..., 0.04902097, 0.04897786,\n",
       "        0.04875013],\n",
       "       [0.04913692, 0.04932824, 0.04941899, ..., 0.04888785, 0.0488357 ,\n",
       "        0.04855312]])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(x.shape)\n",
    "print(u.shape)\n",
    "u"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "bf954b1d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x7f3354108790>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Set random seed for reproducibility\n",
    "torch.manual_seed(42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "cdabefdf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test data shape (256,)\n",
      "input data shape (160, 256)\n",
      "Target data shape (160, 256)\n"
     ]
    }
   ],
   "source": [
    "input_data = u[0:160,:]\n",
    "target_data = u[1:161, :]\n",
    "\n",
    "test_data = u[160, :]\n",
    "#test_target = u[161:201, :]\n",
    "\n",
    "print(\"test data shape\", test_data.shape)\n",
    "#print(\"test target shape\", test_target.shape)\n",
    "\n",
    "print(\"input data shape\",input_data.shape)\n",
    "print(\"Target data shape\",target_data.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b32d98b1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input tensor shape torch.Size([1, 160, 256])\n",
      "Target tensor shape torch.Size([1, 160, 256])\n"
     ]
    }
   ],
   "source": [
    "# Convert data to tensors\n",
    "input_tensor = torch.tensor(input_data).view(batch_size, sequence_length, input_size).float()\n",
    "target_tensor = torch.tensor(target_data).view(batch_size, sequence_length, output_size).float()\n",
    "\n",
    "print(\"input tensor shape\",input_tensor.shape)\n",
    "print(\"Target tensor shape\",target_tensor.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b4c0af1d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Convert test data to tensors\n",
    "test_tensor = torch.tensor(test_data).view(batch_size, 1, input_size).float()\n",
    "#test_target_tensor = torch.tensor(test_target).view(batch_size, 40, output_size).float()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "928ae47f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 10/20000, Loss: 0.0001531622547191\n",
      "Epoch: 20/20000, Loss: 0.0000556913655601\n",
      "Epoch: 30/20000, Loss: 0.0000173606149474\n",
      "Epoch: 40/20000, Loss: 0.0000080684130808\n",
      "Epoch: 50/20000, Loss: 0.0000063897809923\n",
      "Epoch: 60/20000, Loss: 0.0000053548255892\n",
      "Epoch: 70/20000, Loss: 0.0000040599725253\n",
      "Epoch: 80/20000, Loss: 0.0000030928488286\n",
      "Epoch: 90/20000, Loss: 0.0000029393174827\n",
      "Epoch: 100/20000, Loss: 0.0000029374455153\n",
      "Epoch: 110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1900/20000, Loss: 0.0000029368952710\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 1910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 1990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 2990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3780/20000, Loss: 0.0000029368952710\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 3790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 3990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 4990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5660/20000, Loss: 0.0000029368952710\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 5670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 5990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 6990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7540/20000, Loss: 0.0000029368952710\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 7550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 7990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 8990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9420/20000, Loss: 0.0000029368952710\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 9430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 9990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 10990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11260/20000, Loss: 0.0000029368952710\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 11270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 11990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 12990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13100/20000, Loss: 0.0000029368952710\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 13110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 13990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14940/20000, Loss: 0.0000029368952710\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 14950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 14990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 15990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16780/20000, Loss: 0.0000029368952710\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 16790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 16990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 17990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18620/20000, Loss: 0.0000029368952710\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 18630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 18990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19000/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19010/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19020/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19030/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19040/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19050/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19060/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19070/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19080/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19090/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19100/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19110/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19120/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19130/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19140/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19150/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19160/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19170/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19180/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19190/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19200/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19210/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19220/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19230/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19240/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19250/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19260/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19270/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19280/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19290/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19300/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19310/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19320/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19330/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19340/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19350/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19360/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19370/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19380/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19390/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19400/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19410/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19420/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19430/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19440/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19450/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19460/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19470/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19480/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19490/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19500/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19510/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19520/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19530/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19540/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19550/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19560/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19570/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19580/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19590/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19600/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19610/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19620/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19630/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19640/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19650/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19660/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19670/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19680/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19690/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19700/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19710/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19720/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19730/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19740/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19750/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19760/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19770/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19780/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19790/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19800/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19810/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19820/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19830/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19840/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19850/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19860/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19870/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19880/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19890/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19900/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19910/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19920/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19930/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19940/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19950/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19960/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19970/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19980/20000, Loss: 0.0000029368952710\n",
      "Epoch: 19990/20000, Loss: 0.0000029368952710\n",
      "Epoch: 20000/20000, Loss: 0.0000029368952710\n"
     ]
    }
   ],
   "source": [
    "# Create LEM instance\n",
    "lem = LEM(input_size, hidden_size, output_size, dt=0.1)\n",
    "\n",
    "# Loss and optimizer\n",
    "criterion = nn.MSELoss()\n",
    "#optimizer = torch.optim.Adam(lem.parameters(), lr=0.001)\n",
    "optimizer = torch.optim.LBFGS(lem.parameters(), lr=0.1)\n",
    "\n",
    "\n",
    "\n",
    "# Training loop\n",
    "for epoch in range(num_epochs):\n",
    "    def closure():\n",
    "        optimizer.zero_grad()\n",
    "        output = lem(input_tensor)\n",
    "        loss = criterion(output, target_tensor)\n",
    "        loss.backward()\n",
    "        return loss\n",
    "\n",
    "    optimizer.step(closure)\n",
    "\n",
    "    # Print progress\n",
    "    if (epoch + 1) % 10 == 0:\n",
    "        print(f'Epoch: {epoch + 1}/{num_epochs}, Loss: {closure().item():.16f}')\n",
    "\n",
    "    # Flatten prediction tensor\n",
    "    prediction = lem(input_tensor).view(-1).detach().numpy()\n",
    "\n",
    "\n",
    "# # Training loop\n",
    "# for epoch in range(num_epochs):\n",
    "#     # Forward pass\n",
    "#     output = lem(input_tensor)\n",
    "#     loss = criterion(output, target_tensor)\n",
    "\n",
    "#     # Backward and optimize\n",
    "#     optimizer.zero_grad()\n",
    "#     loss.backward()\n",
    "#     optimizer.step()\n",
    "\n",
    "#     # Print progress\n",
    "#     if (epoch + 1) % 10 == 0:\n",
    "#         print(f'Epoch: {epoch + 1}/{num_epochs}, Loss: {loss.item():.6f}')\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "10e64d58",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([1, 1, 256])\n",
      "torch.Size([1, 40, 256])\n"
     ]
    }
   ],
   "source": [
    "print(test_tensor.shape)\n",
    "prediction_tensor = torch.zeros(1, 40, 256).float()\n",
    "print(prediction_tensor.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "68b4109d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 1, 256])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_tensor.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "a4bdf18b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 256)\n",
      "(1, 201)\n",
      "(201, 256)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/data/localhome/tkapoor/.local/lib/python3.8/site-packages/numpy/ma/core.py:2820: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  _data = np.array(data, dtype=dtype, copy=copy,\n",
      "/usr/local/lib/python3.8/dist-packages/matplotlib/contour.py:1180: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  self.levels = np.asarray(levels_arg).astype(np.float64)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.io\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# Load the .mat file\n",
    "mat_data = scipy.io.loadmat('NLS.mat')\n",
    "\n",
    "# Following is the code to plot the data u vs x and t. u is 256*100\n",
    "# matrix. Use first 75 columns for training and 25 for testing :)\n",
    "\n",
    "# Access the variables stored in the .mat file\n",
    "# The variable names in the .mat file become keys in the loaded dictionary\n",
    "x = mat_data['x']\n",
    "t = mat_data['tt']\n",
    "u1 = mat_data['uu']\n",
    "\n",
    "# Use the loaded variables as needed\n",
    "print(x.shape)\n",
    "print(t.shape)\n",
    "print(u.shape)\n",
    "\n",
    "X, T = np.meshgrid(x, t)\n",
    "# Define custom color levels\n",
    "c_levels = np.linspace(np.min(u1), np.max(u1), 100)\n",
    "\n",
    "# Plot the contour\n",
    "plt.figure()\n",
    "plt.figure(figsize=(15, 5))\n",
    "plt.contourf(T, X, u1.T, levels=c_levels, cmap='coolwarm')\n",
    "plt.xlabel('t')\n",
    "plt.ylabel('x')\n",
    "plt.title('Schrondinger-Equation')\n",
    "plt.colorbar()  # Add a colorbar for the contour levels\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "e26e3a5b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.02695056, 0.02802405, 0.02914028, ..., 0.03030097, 0.02914028,\n",
       "        0.02802405],\n",
       "       [0.02830826, 0.02846008, 0.02892091, ..., 0.02978105, 0.02892091,\n",
       "        0.02846008],\n",
       "       [0.02890662, 0.02901981, 0.02934887, ..., 0.02994636, 0.02934887,\n",
       "        0.02901981],\n",
       "       ...,\n",
       "       [0.05102925, 0.05110305, 0.05126979, ..., 0.05150113, 0.05126979,\n",
       "        0.05110305],\n",
       "       [0.05115212, 0.05109786, 0.05112245, ..., 0.05130366, 0.05112245,\n",
       "        0.05109786],\n",
       "       [0.05105769, 0.05101199, 0.05109009, ..., 0.05132839, 0.05109009,\n",
       "        0.05101199]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "u1.shape\n",
    "u1_new = np.abs(u1.T)\n",
    "u1_new"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "e431430b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(256, 1)\n",
      "(256, 1)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with torch.no_grad():\n",
    "    prediction = lem(test_tensor)\n",
    "    prediction = prediction.view(1, 1, 256).float()\n",
    "    prediction_tensor[:, 0, :] = prediction\n",
    "    for i in range(39):\n",
    "        prediction = lem(prediction)\n",
    "        prediction = prediction.view(1, 1, 256).float()\n",
    "        prediction_tensor[:, i+1, :] = prediction\n",
    "        \n",
    "\n",
    "# prediction = torch.squeeze(prediction)\n",
    "# prediction = prediction.reshape(-1, 1)\n",
    "\n",
    "final_out = prediction.detach().numpy().reshape(-1,1)\n",
    "final_true = u1_new[-1,:].reshape(-1,1)\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "x1 = np.linspace(-5, 5, 256)\n",
    "print(final_out.shape)\n",
    "print(final_true.shape)\n",
    "\n",
    "\n",
    "\n",
    "plt.plot(x1, final_out)\n",
    "plt.plot(x1, final_true)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "4b58c018",
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction_tensor.shape\n",
    "prediction_tensor = torch.squeeze(prediction_tensor)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "626dc64f",
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib.font_manager import FontProperties\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "font_path = 'times-new-roman.ttf'\n",
    "custom_font = FontProperties(fname=font_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "07f04c49",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(256, 1)\n",
      "(256, 1)\n"
     ]
    },
    {
     "ename": "NameError",
     "evalue": "name 'FixedLocator' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "Input \u001b[0;32mIn [21]\u001b[0m, in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     37\u001b[0m num_ticks \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m3\u001b[39m\n\u001b[1;32m     38\u001b[0m x_ticks \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mlinspace(np\u001b[38;5;241m.\u001b[39mmin(x), np\u001b[38;5;241m.\u001b[39mmax(x), num_ticks)\n\u001b[0;32m---> 40\u001b[0m ax\u001b[38;5;241m.\u001b[39mxaxis\u001b[38;5;241m.\u001b[39mset_major_locator(\u001b[43mFixedLocator\u001b[49m(x_ticks))\n\u001b[1;32m     42\u001b[0m plt\u001b[38;5;241m.\u001b[39mxticks(fontsize\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m20\u001b[39m, fontproperties\u001b[38;5;241m=\u001b[39mcustom_font)\n\u001b[1;32m     43\u001b[0m plt\u001b[38;5;241m.\u001b[39myticks(fontsize\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m20\u001b[39m, fontproperties\u001b[38;5;241m=\u001b[39mcustom_font)\n",
      "\u001b[0;31mNameError\u001b[0m: name 'FixedLocator' is not defined"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "# Create the figure and axis objects with reduced width\n",
    "fig, ax = plt.subplots(figsize=(7, 5))  # You can adjust the width (8 inches) and height (5 inches) as needed\n",
    "\n",
    "# Make sure the font is Times Roman\n",
    "# plt.rcParams['font.family'] = 'Times New Roman'\n",
    "\n",
    "# # Perform the prediction\n",
    "# with torch.no_grad():\n",
    "#     prediction = lem(test_tensor)\n",
    "\n",
    "final_time_output = prediction_tensor[-30, :]\n",
    "final_out = final_time_output.detach().numpy().reshape(-1, 1)\n",
    "final_true = u1_new[-30, :].reshape(-1, 1)\n",
    "\n",
    "print(final_out.shape)\n",
    "print(final_true.shape)\n",
    "\n",
    "# Plot the data with red and blue lines, one with dotted and one with solid style\n",
    "ax.plot(x1, final_out, color='red', linestyle='dotted', linewidth=5, label='Prediction')\n",
    "ax.plot(x1, final_true, color='blue', linestyle='solid', linewidth=3, label='True')\n",
    "\n",
    "# Set the axis labels\n",
    "ax.set_xlabel(\"$x$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "ax.set_ylabel(\"$u(x, t)$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "\n",
    "# Set the title\n",
    "ax.set_title(\"$t = 0.8300$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "\n",
    "# Set the y-axis ticks to only -1, 0, and 1\n",
    "ax.set_yticks([-1, 0, 1])\n",
    "\n",
    "# Set the number of ticks for x-axis to 3\n",
    "num_ticks = 3\n",
    "x_ticks = np.linspace(np.min(x), np.max(x), num_ticks)\n",
    "\n",
    "ax.xaxis.set_major_locator(FixedLocator(x_ticks))\n",
    "\n",
    "plt.xticks(fontsize=20, fontproperties=custom_font)\n",
    "plt.yticks(fontsize=20, fontproperties=custom_font)\n",
    "\n",
    "# Set the legend\n",
    "# ax.legend()\n",
    "\n",
    "plt.savefig('fig3_r.pdf', dpi=500)\n",
    "plt.savefig('Fig3_r.png', dpi=500)\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "f32b129a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(256, 1)\n",
      "(256, 1)\n"
     ]
    },
    {
     "ename": "NameError",
     "evalue": "name 'FixedLocator' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "Input \u001b[0;32mIn [22]\u001b[0m, in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     37\u001b[0m num_ticks \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m3\u001b[39m\n\u001b[1;32m     38\u001b[0m x_ticks \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mlinspace(np\u001b[38;5;241m.\u001b[39mmin(x), np\u001b[38;5;241m.\u001b[39mmax(x), num_ticks)\n\u001b[0;32m---> 40\u001b[0m ax\u001b[38;5;241m.\u001b[39mxaxis\u001b[38;5;241m.\u001b[39mset_major_locator(\u001b[43mFixedLocator\u001b[49m(x_ticks))\n\u001b[1;32m     42\u001b[0m plt\u001b[38;5;241m.\u001b[39mxticks(fontsize\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m20\u001b[39m, fontproperties\u001b[38;5;241m=\u001b[39mcustom_font)\n\u001b[1;32m     43\u001b[0m plt\u001b[38;5;241m.\u001b[39myticks(fontsize\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m20\u001b[39m, fontproperties\u001b[38;5;241m=\u001b[39mcustom_font)\n",
      "\u001b[0;31mNameError\u001b[0m: name 'FixedLocator' is not defined"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "# Create the figure and axis objects with reduced width\n",
    "fig, ax = plt.subplots(figsize=(7, 5))  # You can adjust the width (8 inches) and height (5 inches) as needed\n",
    "\n",
    "# Make sure the font is Times Roman\n",
    "# plt.rcParams['font.family'] = 'Times New Roman'\n",
    "\n",
    "# # Perform the prediction\n",
    "# with torch.no_grad():\n",
    "#     prediction = lem(test_tensor)\n",
    "\n",
    "final_time_output = prediction_tensor[-20, :]\n",
    "final_out = final_time_output.detach().numpy().reshape(-1, 1)\n",
    "final_true = u1_new[-20, :].reshape(-1, 1)\n",
    "\n",
    "print(final_out.shape)\n",
    "print(final_true.shape)\n",
    "\n",
    "# Plot the data with red and blue lines, one with dotted and one with solid style\n",
    "ax.plot(x1, final_out, color='red', linestyle='dotted', linewidth=5, label='Prediction')\n",
    "ax.plot(x1, final_true, color='blue', linestyle='solid', linewidth=3, label='True')\n",
    "\n",
    "# Set the axis labels\n",
    "ax.set_xlabel(\"$x$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "ax.set_ylabel(\"$u(x, t)$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "\n",
    "# Set the title\n",
    "ax.set_title(\"$t = 0.8300$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "\n",
    "# Set the y-axis ticks to only -1, 0, and 1\n",
    "ax.set_yticks([-1, 0, 1])\n",
    "\n",
    "# Set the number of ticks for x-axis to 3\n",
    "num_ticks = 3\n",
    "x_ticks = np.linspace(np.min(x), np.max(x), num_ticks)\n",
    "\n",
    "ax.xaxis.set_major_locator(FixedLocator(x_ticks))\n",
    "\n",
    "plt.xticks(fontsize=20, fontproperties=custom_font)\n",
    "plt.yticks(fontsize=20, fontproperties=custom_font)\n",
    "\n",
    "# Set the legend\n",
    "# ax.legend()\n",
    "\n",
    "plt.savefig('fig3_r.pdf', dpi=500)\n",
    "plt.savefig('Fig3_r.png', dpi=500)\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "7018e539",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(256, 1)\n",
      "(256, 1)\n"
     ]
    },
    {
     "ename": "NameError",
     "evalue": "name 'FixedLocator' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "Input \u001b[0;32mIn [23]\u001b[0m, in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     37\u001b[0m num_ticks \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m3\u001b[39m\n\u001b[1;32m     38\u001b[0m x_ticks \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mlinspace(np\u001b[38;5;241m.\u001b[39mmin(x), np\u001b[38;5;241m.\u001b[39mmax(x), num_ticks)\n\u001b[0;32m---> 40\u001b[0m ax\u001b[38;5;241m.\u001b[39mxaxis\u001b[38;5;241m.\u001b[39mset_major_locator(\u001b[43mFixedLocator\u001b[49m(x_ticks))\n\u001b[1;32m     42\u001b[0m plt\u001b[38;5;241m.\u001b[39mxticks(fontsize\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m20\u001b[39m, fontproperties\u001b[38;5;241m=\u001b[39mcustom_font)\n\u001b[1;32m     43\u001b[0m plt\u001b[38;5;241m.\u001b[39myticks(fontsize\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m20\u001b[39m, fontproperties\u001b[38;5;241m=\u001b[39mcustom_font)\n",
      "\u001b[0;31mNameError\u001b[0m: name 'FixedLocator' is not defined"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "# Create the figure and axis objects with reduced width\n",
    "fig, ax = plt.subplots(figsize=(7, 5))  # You can adjust the width (8 inches) and height (5 inches) as needed\n",
    "\n",
    "# Make sure the font is Times Roman\n",
    "# plt.rcParams['font.family'] = 'Times New Roman'\n",
    "\n",
    "# # Perform the prediction\n",
    "# with torch.no_grad():\n",
    "#     prediction = lem(test_tensor)\n",
    "\n",
    "final_time_output = prediction_tensor[-10, :]\n",
    "final_out = final_time_output.detach().numpy().reshape(-1, 1)\n",
    "final_true = u1_new[-10, :].reshape(-1, 1)\n",
    "\n",
    "print(final_out.shape)\n",
    "print(final_true.shape)\n",
    "\n",
    "# Plot the data with red and blue lines, one with dotted and one with solid style\n",
    "ax.plot(x1, final_out, color='red', linestyle='dotted', linewidth=5, label='Prediction')\n",
    "ax.plot(x1, final_true, color='blue', linestyle='solid', linewidth=3, label='True')\n",
    "\n",
    "# Set the axis labels\n",
    "ax.set_xlabel(\"$x$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "ax.set_ylabel(\"$u(x, t)$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "\n",
    "# Set the title\n",
    "ax.set_title(\"$t = 0.8300$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "\n",
    "# Set the y-axis ticks to only -1, 0, and 1\n",
    "ax.set_yticks([-1, 0, 1])\n",
    "\n",
    "# Set the number of ticks for x-axis to 3\n",
    "num_ticks = 3\n",
    "x_ticks = np.linspace(np.min(x), np.max(x), num_ticks)\n",
    "\n",
    "ax.xaxis.set_major_locator(FixedLocator(x_ticks))\n",
    "\n",
    "plt.xticks(fontsize=20, fontproperties=custom_font)\n",
    "plt.yticks(fontsize=20, fontproperties=custom_font)\n",
    "\n",
    "# Set the legend\n",
    "# ax.legend()\n",
    "\n",
    "plt.savefig('fig3_r.pdf', dpi=500)\n",
    "plt.savefig('Fig3_r.png', dpi=500)\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "07cc9ea3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(201, 256)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u_test_full = u1_new\n",
    "u_test_full.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "568d17b7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exact Solution\n",
    "\n",
    "u_test = u1_new\n",
    "u_test_full = u_test[160:200, :]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "3124a5b1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(40, 256)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prediction_tensor.shape\n",
    "u_test_full.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "ec724750",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([40, 256])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Extrapolation\n",
    "\n",
    "prediction_tensor = torch.squeeze(prediction_tensor)\n",
    "k1 = ( prediction_tensor - u_test_full)**2\n",
    "u_test_full_tensor = torch.tensor(u_test_full**2)\n",
    "u_test_full_tensor.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "55c2d8d8",
   "metadata": {},
   "source": [
    "### L2 norm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "4b7e05f5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Relative Error Test:  0.004880395129128665 %\n"
     ]
    }
   ],
   "source": [
    "# Compute the relative L2 error norm (generalization error)\n",
    "relative_error_test = torch.mean(k1)/ torch.mean(u_test_full_tensor)\n",
    "\n",
    "print(\"Relative Error Test: \", relative_error_test.item(), \"%\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62db3912",
   "metadata": {},
   "source": [
    "### maximum absolute error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "2c0b4996",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor(0.2746, dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "R_abs = torch.max(torch.abs(prediction_tensor - u_test_full))\n",
    "print(R_abs)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "847cdf73",
   "metadata": {},
   "source": [
    "### explained variance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "f2657066",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Explained Variance Score: 0.992439625620205\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_55355/2104891356.py:7: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
      "  a = torch.tensor(a)\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "\n",
    "a = prediction_tensor\n",
    "b = u_test_full\n",
    "# Assuming 'a' is your predicted values (model's predictions) and 'b' is the true values (ground truth)\n",
    "# Make sure 'a' and 'b' are PyTorch tensors\n",
    "a = torch.tensor(a)\n",
    "b = torch.tensor(b)\n",
    "# Calculate the mean of 'b'\n",
    "mean_b = torch.mean(b)\n",
    "\n",
    "# Calculate the Explained Variance Score\n",
    "numerator = torch.var(b - a)  # Variance of the differences between 'b' and 'a'\n",
    "denominator = torch.var(b)    # Variance of 'b'\n",
    "evs = 1 - numerator / denominator\n",
    "\n",
    "print(\"Explained Variance Score:\", evs.item())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8574441f",
   "metadata": {},
   "source": [
    "### MEan absolute error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "03ae19a0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Relative Error Test:  tensor(0.0346, dtype=torch.float64) %\n"
     ]
    }
   ],
   "source": [
    "# Compute the relative L2 error norm (generalization error)\n",
    "relative_error_test = torch.mean(torch.abs(prediction_tensor - u_test_full))\n",
    "\n",
    "print(\"Relative Error Test: \", relative_error_test, \"%\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5551399f",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.io\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# Load the .mat file\n",
    "mat_data = scipy.io.loadmat('NLS.mat')\n",
    "\n",
    "# Following is the code to plot the data u vs x and t. u is 256*100\n",
    "# matrix. Use first 75 columns for training and 25 for testing :)\n",
    "\n",
    "# Access the variables stored in the .mat file\n",
    "# The variable names in the .mat file become keys in the loaded dictionary\n",
    "x = mat_data['x']\n",
    "t = mat_data['tt']\n",
    "u = mat_data['uu']\n",
    "\n",
    "# Use the loaded variables as needed\n",
    "print(x.shape)\n",
    "print(t.shape)\n",
    "print(u.shape)\n",
    "\n",
    "X, T = np.meshgrid(x, t)\n",
    "# Define custom color levels\n",
    "c_levels = np.linspace(np.min(u), np.max(u), 100)\n",
    "\n",
    "# Plot the contour\n",
    "plt.figure()\n",
    "plt.figure(figsize=(15, 5))\n",
    "plt.contourf(T, X, u.T, levels=c_levels, cmap='coolwarm')\n",
    "plt.xlabel('t')\n",
    "plt.ylabel('x')\n",
    "plt.title('Schrondinger-Equation')\n",
    "plt.colorbar()  # Add a colorbar for the contour levels\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "48cef6dc",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bfbb3a48",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "91320806",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f050b0af",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b303a668",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "c73d52c8",
   "metadata": {},
   "source": [
    "### 80 percent PINN solution 20 lem prediction in contour plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3c3adab4",
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ee92d59f",
   "metadata": {},
   "outputs": [],
   "source": [
    "input_tensor.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "da346f5f",
   "metadata": {},
   "outputs": [],
   "source": [
    "conc_u = torch.squeeze(input_tensor)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4369387d",
   "metadata": {},
   "outputs": [],
   "source": [
    "concatenated_tensor = torch.cat((conc_u, prediction), dim=0)\n",
    "\n",
    "concatenated_tensor.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "83ae3691",
   "metadata": {},
   "outputs": [],
   "source": [
    "t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f8833373",
   "metadata": {},
   "outputs": [],
   "source": [
    "t1 = np.linspace(0, 1.5707 , 200)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3e19cc08",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.ticker import FixedLocator\n",
    "\n",
    "# Assuming you have defined concatenated_tensor as a PyTorch tensor\n",
    "# concatenated_tensor = torch.cat((tensor1, tensor2), dim=0)\n",
    "\n",
    "# Convert concatenated_tensor to a NumPy array\n",
    "concatenated_array = concatenated_tensor.numpy()\n",
    "\n",
    "# Define custom color levels\n",
    "X, T = np.meshgrid(x, t1)\n",
    "\n",
    "# Define custom color levels using the minimum and maximum from the NumPy array\n",
    "c_levels = np.linspace(np.min(concatenated_array), np.max(concatenated_array), 100)\n",
    "\n",
    "# Plot the contour\n",
    "plt.figure(figsize=(15, 5))\n",
    "CS1 = plt.contourf(T, X, concatenated_array, levels=c_levels, cmap='coolwarm')\n",
    "\n",
    "# Create a custom font with Times New Roman\n",
    "plt.rcParams['figure.figsize'] = [10, 4]\n",
    "\n",
    "from matplotlib.font_manager import FontProperties\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "font_path = 'times-new-roman.ttf'\n",
    "custom_font = FontProperties(fname=font_path)\n",
    "\n",
    "cbar1 = plt.colorbar(CS1)\n",
    "# Set the number of ticks for the color bar with uniformly distributed numbers\n",
    "num_ticks = 5\n",
    "c_ticks = np.linspace(np.min(concatenated_array), np.max(concatenated_array), num_ticks)\n",
    "cbar1.set_ticks(c_ticks)\n",
    "\n",
    "for t in cbar1.ax.get_yticklabels():\n",
    "    t.set_fontproperties(custom_font)\n",
    "    t.set_fontsize(20)\n",
    "\n",
    "plt.xlabel('$t$', fontsize=20, fontproperties=custom_font)\n",
    "plt.ylabel('$x$', fontsize=20, fontproperties=custom_font)\n",
    "plt.title('$u(x, t)$', fontsize=20, fontproperties=custom_font)\n",
    "plt.xticks(fontsize=20, fontproperties=custom_font)\n",
    "plt.yticks(fontsize=20, fontproperties=custom_font)\n",
    "\n",
    "# Add a dotted line at t = 0.8\n",
    "plt.axvline(x=1.26449, color='black', linestyle='dotted')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 5\n",
    "num_ticks = 5\n",
    "x_ticks = np.linspace(np.min(T), np.max(T), num_ticks)\n",
    "y_ticks = np.linspace(np.min(X), np.max(X), num_ticks)\n",
    "\n",
    "plt.gca().xaxis.set_major_locator(FixedLocator(x_ticks))\n",
    "plt.gca().yaxis.set_major_locator(FixedLocator(y_ticks))\n",
    "cbar1.locator = FixedLocator(c_ticks)\n",
    "\n",
    "plt.savefig('Schr_80_20.pdf', dpi=300)\n",
    "plt.savefig('schr_80_20.png', dpi=300)\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b4a51b8e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "pytorch"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
